最後一週就讓我們仔細看一下 OAuth grant 以及 OIDC flow 當中各種 request & response 的結構吧
08 - OAuth (2) Authorization code grant

由 Client 將使用者導向 Authorization server,其 url params 如下
GET /authorize?response_type=code
&client_id=xxx
&state=xxx
&scope=xxx
&redirect_uri=xxx
&resource=xxx
&code_challenge=xxx
&code_challenge_method=xxx
response_type: 這裡的值為 "code",代表我們採用 OAuth authorization code grantclient_id: 在 Authorization server 所登記的 Client 的 IDstate: 當中包含了 Client 當前的狀態資訊,之後會用來比對 Authorization server response 當中的 state 以確保前後一致scope: 代表這個請求所想要取得授權的內容,譬如 get:dataredirect_uri: 在 step 5 Authorization server 將使用者導回到 Client 時的 urlresource: 在 Authorization server 所登記的 Resource server 的 IDcode_challenge: PKCE 流程當中的 code challengecode_challenge_method: PKCE 流程當中的 code challenge method在使用者輸入帳號密碼,驗證身份完畢之後 (step 3 & 4),Authorization server 的回應如下
https://client_redirect_uri/callback?code=xxx&state=xxx
code: authorization codestate: 跟上面 request 當中的 state 一樣拿到 authorization code 的 Client,就可以向 Authorization server 發出 POST 請求
POST /token
grant_type=xxx
client_id=xxx
code_verifier=xxx
redirect_uri=xxx
grant_type: 這裡會使用 "authorization_code" 代表採用 OAuth authorization code grantcode: 先前 Client 收到的 authorization codeclient_id: 在 Authorization server 所登記的 Client 的 IDcode_verifier: PKCE 當中的 code verifier,用來確保當初送出請求和現在送出請求的 Client 是同一個redirect_uri: 同先前的 redirect uri收到 Client 發出的 POST 請求,Authorization server 透過 code 以及 PKCE 確認 Client 身份之後,就可以發出 response,當中所攜帶的 payload 如下
{
  access_token: xxx,
  token_type: xxx,
  expired_in: xxx,
  refresh_token: xxx
}
access_token: Client 可以用來向 Resource server 發送請求token_type: token 的類型,譬如 "Bearer"expired_in: token 的續存時間refresh_token: 在 access_token 到期之後,Client 可以拿 refresh_token 向 Authorization server 取得新的 access_token